package calculation;

/**
 * 求 1+2+...+n ，要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句（A?B:C）。
 * 输入: n = 3 输出: 6      输入: n = 9 输出: 45
 * 限制：1 <= n <= 10000
 * @author 78044
 */
public class Topic1 {


    public int sumNums(int n) {
        return (int)(Math.pow(n,2)+n)>>1;
    }

    /**
     * 官方解法1
     * 递归
     *
     * 以逻辑运算符 && 为例，对于 A && B 这个表达式，如果 A 表达式返回 \textit{False}False ，
     * 那么 A && B 已经确定为 \textit{False}False ，此时不会去执行表达式 B。同理，对于逻辑运算符 ||，
     * 对于 A || B 这个表达式，如果 A 表达式返回 \textit{True}True ，那么 A || B 已经确定为 \textit{True}True ，此时不会去执行表达式 B。
     *
     * 利用这一特性，我们可以将判断是否为递归的出口看作 A && B 表达式中的 A 部分，递归的主体函数看作 B 部分。
     * 如果不是递归出口，则返回 \textit{True}True，并继续执行表达式 B 的部分，否则递归结束。
     * 当然，你也可以用逻辑运算符 || 给出类似的实现，这里我们只提供结合逻辑运算符 && 的递归实现。
     *
     * 作者：LeetCode-Solution
     * 链接：https://leetcode-cn.com/problems/qiu-12n-lcof/solution/qiu-12n-by-leetcode-solution/
     * 来源：力扣（LeetCode）
     * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
     */
    public int sumNums1(int n){
//        return n==1?1:n+sumNums1(n-1);
        boolean flag = n >0 &&  (n+=sumNums(n-1))>0;
        return n;
    }

    public static void main(String[] args) {
        Topic1 topic1 = new Topic1();
        System.out.println(topic1.sumNums(1));
        System.out.println(topic1.sumNums(2));

        System.out.println(topic1.sumNums1(3));
        System.out.println(topic1.sumNums(4));
        System.out.println(topic1.sumNums(5));
        System.out.println(topic1.sumNums1(9));
    }
}
